Make gtk_widget_set/get_can_pick public
authorMatthias Clasen <mclasen@redhat.com>
Fri, 22 Feb 2019 02:53:34 +0000 (21:53 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 22 Feb 2019 02:53:34 +0000 (21:53 -0500)
This is a generally useful property to make widgets
'transparent' for input purposes.

docs/reference/gtk/gtk4-sections.txt
gtk/gtkwidget.c
gtk/gtkwidget.h
gtk/gtkwidgetprivate.h

index 176d25325d958e89afddce21f1ad00f39a98e80b..6a0cc0b852e51f145868a8b20bf9e44bab9353e8 100644 (file)
@@ -4568,6 +4568,8 @@ gtk_widget_set_can_focus
 gtk_widget_get_focus_on_click
 gtk_widget_set_focus_on_click
 gtk_widget_set_focus_child
+gtk_widget_get_can_pick
+gtk_widget_set_can_pick
 gtk_widget_get_has_surface
 gtk_widget_set_has_surface
 gtk_widget_get_sensitive
index edade0538edebe166f390a9313250c6523746421..c620b51f7b19c8ace3a7c3d9709f10517a6c43a1 100644 (file)
@@ -518,6 +518,7 @@ enum {
   PROP_CAN_FOCUS,
   PROP_HAS_FOCUS,
   PROP_IS_FOCUS,
+  PROP_CAN_PICK,
   PROP_FOCUS_ON_CLICK,
   PROP_CAN_DEFAULT,
   PROP_HAS_DEFAULT,
@@ -1036,6 +1037,13 @@ gtk_widget_class_init (GtkWidgetClass *klass)
                             FALSE,
                             GTK_PARAM_READWRITE);
 
+  widget_props[PROP_CAN_PICK] =
+      g_param_spec_boolean ("can-pick",
+                            P_("Can pick"),
+                            P_("Whether the widget can receive pointer events"),
+                            FALSE,
+                            GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
+
   /**
    * GtkWidget:focus-on-click:
    *
@@ -2262,6 +2270,9 @@ gtk_widget_set_property (GObject         *object,
       if (g_value_get_boolean (value))
        gtk_widget_grab_focus (widget);
       break;
+    case PROP_CAN_PICK:
+      gtk_widget_set_can_pick (widget, g_value_get_boolean (value));
+      break;
     case PROP_FOCUS_ON_CLICK:
       gtk_widget_set_focus_on_click (widget, g_value_get_boolean (value));
       break;
@@ -2437,6 +2448,9 @@ gtk_widget_get_property (GObject         *object,
     case PROP_IS_FOCUS:
       g_value_set_boolean (value, gtk_widget_is_focus (widget));
       break;
+    case PROP_CAN_PICK:
+      g_value_set_boolean (value, gtk_widget_get_can_pick (widget));
+      break;
     case PROP_FOCUS_ON_CLICK:
       g_value_set_boolean (value, gtk_widget_get_focus_on_click (widget));
       break;
@@ -2871,6 +2885,7 @@ gtk_widget_init (GTypeInstance *instance, gpointer g_class)
 #ifdef G_ENABLE_DEBUG
   priv->highlight_resize = FALSE;
 #endif
+  priv->can_pick = TRUE;
 
   switch (_gtk_widget_get_direction (widget))
     {
@@ -11206,7 +11221,7 @@ gtk_widget_get_allocation (GtkWidget     *widget,
  *
  * Pass-through widgets and insensitive widgets do never respond to
  * input and will therefor always return %FALSE here. See
- * gtk_widget_set_pass_through() and gtk_widget_set_sensitive() for
+ * gtk_widget_set_can_pick() and gtk_widget_set_sensitive() for
  * details about those functions.
  *
  * Returns: %TRUE if @widget contains (@x, @y).
@@ -11218,7 +11233,7 @@ gtk_widget_contains (GtkWidget  *widget,
 {
   g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
 
-  if (gtk_widget_get_pass_through (widget) ||
+  if (!gtk_widget_get_can_pick (widget) ||
       !_gtk_widget_is_sensitive (widget) ||
       !_gtk_widget_is_drawable (widget))
     return FALSE;
@@ -11257,7 +11272,7 @@ gtk_widget_pick (GtkWidget *widget,
 
   g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
 
-  if (gtk_widget_get_pass_through (widget) ||
+  if (!gtk_widget_get_can_pick (widget) ||
       !_gtk_widget_is_sensitive (widget) ||
       !_gtk_widget_is_drawable (widget))
     return NULL;
@@ -13700,20 +13715,27 @@ gtk_widget_get_cursor (GtkWidget *widget)
 }
 
 void
-gtk_widget_set_pass_through (GtkWidget *widget,
-                             gboolean   pass_through)
+gtk_widget_set_can_pick (GtkWidget *widget,
+                         gboolean   can_pick)
 {
   GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
 
-  priv->pass_through = !!pass_through;
+  can_pick = !!can_pick;
+
+  if (priv->can_pick == can_pick)
+    return;
+
+  priv->can_pick = can_pick;
+
+  g_object_notify_by_pspec (G_OBJECT (widget), widget_props[PROP_CAN_PICK]);
 }
 
 gboolean
-gtk_widget_get_pass_through (GtkWidget *widget)
+gtk_widget_get_can_pick (GtkWidget *widget)
 {
   GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget);
 
-  return priv->pass_through;
+  return priv->can_pick;
 }
 
 /**
index 0098c424d33b5f9f13f4b146bee20bb80d4c0a26..85495f443169de024f9f8902e9aaa9b793cd974a 100644 (file)
@@ -494,6 +494,13 @@ void       gtk_widget_set_focus_on_click  (GtkWidget           *widget,
 GDK_AVAILABLE_IN_ALL
 gboolean   gtk_widget_get_focus_on_click  (GtkWidget           *widget);
 
+GDK_AVAILABLE_IN_ALL
+void       gtk_widget_set_can_pick        (GtkWidget           *widget,
+                                           gboolean             can_pick);
+GDK_AVAILABLE_IN_ALL
+gboolean   gtk_widget_get_can_pick        (GtkWidget           *widget);
+
+
 GDK_AVAILABLE_IN_ALL
 void       gtk_widget_set_can_default     (GtkWidget           *widget,
                                            gboolean             can_default);
index 8b4bf94e676cab871a523b9f01aefde910688bf8..16fe80878d19480921b9fab3dedc95d6da96d852 100644 (file)
@@ -75,7 +75,7 @@ struct _GtkWidgetPrivate
   guint shadowed              : 1;
   guint child_visible         : 1;
   guint multidevice           : 1;
-  guint pass_through          : 1;
+  guint can_pick              : 1;
 
   /* Queue-resize related flags */
   guint resize_needed         : 1; /* queue_resize() has been called but no get_preferred_size() yet */
@@ -332,10 +332,6 @@ void              gtk_widget_get_surface_allocation         (GtkWidget *widget,
 GtkWidget *       gtk_widget_common_ancestor               (GtkWidget *widget_a,
                                                             GtkWidget *widget_b);
 
-void              gtk_widget_set_pass_through              (GtkWidget *widget,
-                                                            gboolean   pass_through);
-gboolean          gtk_widget_get_pass_through              (GtkWidget *widget);
-
 void              gtk_widget_cancel_event_sequence         (GtkWidget             *widget,
                                                             GtkGesture            *gesture,
                                                             GdkEventSequence      *sequence,